// observe思想 递归遍历传入的obj  定义每个属性的拦截
function isObj(obj) {
    return obj && typeof obj === 'object'
}
// 数据监听
function observe(obj) {
    // 递归时候 非对象key时候结束递归
    if (!isObj(obj)) return;
    if (Array.isArray(obj)) {

    } else if (isObj(obj)) {
        const keys = Object.keys(obj)
        keys.forEach((key) => {
            defineReactive(obj, key, obj[key])
        })
    }

}
// key 拦截
function defineReactive(obj, key, val) {
    // 递归拦截每个可能为对象的val
    observe(val)
    Object.defineProperty(obj, key, {
        get() {
            console.log(`获取key:${key}==>值为:${val}`)
            return val
        },
        set(newVal) {
            if (newVal !== val) {
                observe(newVal) // newVal 可能是对象
                console.log(`设置key:${key}==>值为:${newVal}`)
                val = newVal
            }
        }
    })
}